/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: H_tao_X
 * Date: 2022-11-17
 * Time: 22:49
 */

import com.beans.User;
import com.beans.UserController;
import com.beans.UserService;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

/**
 * 这是一个启动类
 */

// Application 和 BeanFactory 的区别
    // 1. Application 是 BeanFactory 的子类，BeanFactory只提供基础访问Bean的方法
    // 而 Application 除了用友 BeanFactory的所有功能之外，还提供了更多的方法实现
    // 比如 支持国际化，以及事件的传播等方面的支持

    // 2. 从性能上来讲二者是不同的：BeanFactory 是按需加载 Bean 的，而 Application 是
    // 饿汉模式，在创建时候 会将所有的 Bean 加载

public class App {
    public static void main(String[] args) {

        /**
         * 使用 Application 获取上下问
         */
        // 1. 获取上下问
        ApplicationContext context =
                 new ClassPathXmlApplicationContext("spring-config.xml");
        // 2. 获取 Bean
       UserController userController =  context.getBean("userController", UserController.class);
       User user = context.getBean(User.class);
        // 3. 使用 Bean
        userController.sayHi();
        System.out.println(user);

        /**
         * 使用 BeanFactory 获取上下文
         */

        // 1. 获取上下问
        BeanFactory beanFactory = new XmlBeanFactory
                (new ClassPathResource("spring-config.xml"));
        // 2. 获取 Bean
        UserService userService = beanFactory.getBean("userService", UserService.class);
        // 3. 使用 Bean
        userController.sayHi();
    }
}
